package com.neusoft.exercise;

import java.io.*;
import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * *
 * 
 * @author LYW 
 * 给定一个0～1000的整数，求各位数的和，
 * 例如345的结果是3+4+5＝12 注：分解数字既可以先除后模也可以先模后除
 *
 */
public class NumSum {
	int iNum = 0;
	int iSum = 0;

	public static void main(String[] args) {
		//
		NumSum numSum = new NumSum();
		// do while 循环，发生异常重新输入
		do {
			try {
				numSum.iNum = numSum.inputScan();
				break;
			} catch (Exception e) {
				// catch 怎么处理？
				// 显示异常信息--因为循环输入，异常处理这没必要显示异常信息，
				//直接写 输入错误，请重新输入就可以
				//System.out.println("exception:"+e);
				System.out.println("输入错误，请重新输入：");
			}
		} while (true);
		numSum.iSum = numSum.summation(numSum.iNum);
		System.out.println("输入的数字是：" + numSum.iNum + " ，各位数的和为：" + numSum.iSum);

	}

	/*
	 * 源代码中如果控制台输入数据大过int范围，会报出异常 将这个输入打包成一个函数，通过调用函数获取控制台输入 进而能在main函数中捕获异常
	 */
	int inputScan() throws InputMismatchException {
		// 接收整数的变量
		int inumScan = 0;
		Scanner scanNo = new Scanner(System.in);
		while (true) {
			System.out.println("请输入一个0-1000的整数");
			inumScan = scanNo.nextInt();
			if (inumScan <= 1000) {
				break;
			}

		}
		return inumScan;

	}

	/*
	 * 定义一个各位求和的方法，通过实例调用解决问题
	 * 
	 */
	int summation(int inum) {
		int isumm = 0;
		// 定义个位，十位 ，百位， 千位存储值的变量
		// 这四个变量其实用byte存储就足够了
		int bdigit1 = 0;
		int bdigit10 = 0;
		int bdigit100 = 0;
		int bdigit1000 = 0;
		// 计算各位上的数字
		//计算中没必要强转byte，用int就可以
		bdigit1000 = (byte) (inum / 1000);
		inum = inum % 1000;
		bdigit100 = (byte) (inum / 100);
		inum = inum % 100;
		bdigit10 = (byte) (inum / 10);
		inum = inum % 10;
		bdigit1 = (byte) inum;
		
		// 求和
		isumm = bdigit1 + bdigit10 + bdigit100 + bdigit1000;
		return isumm;
	}

}
